home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / misc / unix / tracker_4_3.lzh / tracker / autoinit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-13  |  1.1 KB  |  69 lines

  1. /* autoinit.c 
  2.     vi:se ts=3 sw=3:
  3.  */
  4.  
  5. /* $Id: autoinit.c,v 4.1 1994/01/12 16:10:20 espie Exp espie $ 
  6.  * $Log: autoinit.c,v $
  7.  * Revision 4.1  1994/01/12  16:10:20  espie
  8.  * Fixed up last minute problems.
  9.  *
  10.  * Revision 4.0  1994/01/11  17:41:28  espie
  11.  * *** empty log message ***
  12.  *
  13.  * Revision 1.7  1994/01/09  17:36:22  Espie
  14.  * Generalized open.c.
  15.  *
  16.  * Revision 1.6  1994/01/07  15:06:26  Espie
  17.  * Id
  18.  *
  19.  */
  20.  
  21. #include <stdio.h>
  22. #include <stdlib.h>
  23.  
  24. #include "defs.h"
  25. #include "extern.h"
  26.  
  27. ID("$Id: autoinit.c,v 4.1 1994/01/12 16:10:20 espie Exp espie $")
  28.  
  29. LOCAL struct clist
  30.     {
  31.     struct clist *next;
  32.     void (*func) P((void));
  33.     } *list = 0;
  34.     
  35.  
  36. void at_end(cleanup)
  37. void (*cleanup) P((void));
  38.     {
  39. #ifdef USE_AT_EXIT
  40.     atexit(cleanup);
  41. #else
  42.     struct clist *new;
  43.     new = (struct clist *)malloc(sizeof(struct clist));
  44.     if (!new)
  45.         {
  46.         (*cleanup)();
  47.         end_all("Allocation problem");
  48.         }
  49.     new->next = list;
  50.     new->func = cleanup;
  51.     list = new;
  52. #endif
  53.     }
  54.     
  55. void end_all(s)
  56. char *s;
  57.     {
  58. #ifndef USE_AT_EXIT
  59.     struct clist *p;
  60. #endif
  61.     if (s)
  62.         notice(s);
  63. #ifndef USE_AT_EXIT
  64.     for (p = list; p; p = p->next)
  65.         (p->func)();            /* don't bother freeing (malloc) */
  66. #endif
  67.     exit(s ? 10 : 0);
  68.     }
  69.